Telegram Group & Telegram Channel
🧩 Задача для дата-сайентистов: "Средняя зарплата" (с подвохом)

📖 Описание задачи

У вас есть DataFrame df с данными о зарплатах сотрудников компании:


import pandas as pd

data = {
'employee_id': [1, 2, 3, 4, 5, 6],
'department': ['IT', 'IT', 'HR', 'HR', 'Finance', 'Finance'],
'salary': [100000, None, 50000, None, 70000, None]
}

df = pd.DataFrame(data)
print(df)


Результат:


employee_id department salary
0 1 IT 100000.0
1 2 IT NaN
2 3 HR 50000.0
3 4 HR NaN
4 5 Finance 70000.0
5 6 Finance NaN


В задаче требуется заполнить пропущенные значения зарплат в каждом отделе медианой зарплаты этого отдела.
Если медиана не может быть рассчитана (например, все значения NaN) — оставить NaN.

Вы пишете следующий код:


df['salary_filled'] = df.groupby('department')['salary'].transform(lambda x: x.fillna(x.median()))


Код выполняется без ошибок, но когда вы проверяете результат:


print(df)


Получаете:


employee_id department salary salary_filled
0 1 IT 100000.0 100000.0
1 2 IT NaN 100000.0
2 3 HR 50000.0 50000.0
3 4 HR NaN 50000.0
4 5 Finance 70000.0 70000.0
5 6 Finance NaN 70000.0


Всё вроде бы верно…

Но через неделю приходит заказчик и говорит:

> «Ты заполнил пропуски, но потом выяснилось, что в реальных данных в одном отделе все зарплаты NaN, а значит медиана не существует.
> А в твоём коде при такой ситуации почему-то появляется 0 вместо NaN!»

📝 Вопросы:

1. Почему появилось 0 (хотя ожидалось NaN)?
2. Как переписать код так, чтобы:
- Если медиана существует → заполнить ею NaN
- Если медиана не существует (все значения NaN) → оставить NaN

---

🎯 Что проверяет задача:

Понимание, как median() работает на пустой серии
Понимание, что fillna(np.nan) может привести к замещению на 0 при приведении типов
Умение работать с группами, где нет данных

---

💡 Подсказка:

Если `x.median()` вернёт `nan`, то `x.fillna(nan)` оставит NaN внутри группы, **но transform может "автоматически" заменить NaN на 0 при сборке результата** (особенность Pandas).

Нужно явно управлять значением медианы, чтобы избежать непредвиденного замещения.

---

Ожидаемое правильное решение:

```python
def fill_with_median_or_nan(x):
med = x.median()
return x.fillna(med if pd.notna(med) else np.nan)

df['salary_filled'] = df.groupby('department')['salary'].transform(fill_with_median_or_nan)
```

Теперь в отделах, где медиана не существует, **NaN останется NaN**, а не превратится в 0.


🔥 Дополнительный подвох (для усложнения):

Что будет, если отдел состоит только из одного сотрудника с NaN?
→ Нужно ли обработать случай, где в отделе всего 1 запись и она NaN?


📝 Вывод:

Эта задача проверяет:

Понимание нюансов заполнения пропусков в Pandas
Внимательность к corner-case ситуациям
Умение работать с группами с частично или полностью отсутствующими данными

🔥 Отличная тренировка внимательности и глубины понимания Pandas!



tg-me.com/machinelearning_interview/1785
Create:
Last Update:

🧩 Задача для дата-сайентистов: "Средняя зарплата" (с подвохом)

📖 Описание задачи

У вас есть DataFrame df с данными о зарплатах сотрудников компании:


import pandas as pd

data = {
'employee_id': [1, 2, 3, 4, 5, 6],
'department': ['IT', 'IT', 'HR', 'HR', 'Finance', 'Finance'],
'salary': [100000, None, 50000, None, 70000, None]
}

df = pd.DataFrame(data)
print(df)


Результат:


employee_id department salary
0 1 IT 100000.0
1 2 IT NaN
2 3 HR 50000.0
3 4 HR NaN
4 5 Finance 70000.0
5 6 Finance NaN


В задаче требуется заполнить пропущенные значения зарплат в каждом отделе медианой зарплаты этого отдела.
Если медиана не может быть рассчитана (например, все значения NaN) — оставить NaN.

Вы пишете следующий код:


df['salary_filled'] = df.groupby('department')['salary'].transform(lambda x: x.fillna(x.median()))


Код выполняется без ошибок, но когда вы проверяете результат:


print(df)


Получаете:


employee_id department salary salary_filled
0 1 IT 100000.0 100000.0
1 2 IT NaN 100000.0
2 3 HR 50000.0 50000.0
3 4 HR NaN 50000.0
4 5 Finance 70000.0 70000.0
5 6 Finance NaN 70000.0


Всё вроде бы верно…

Но через неделю приходит заказчик и говорит:

> «Ты заполнил пропуски, но потом выяснилось, что в реальных данных в одном отделе все зарплаты NaN, а значит медиана не существует.
> А в твоём коде при такой ситуации почему-то появляется 0 вместо NaN!»

📝 Вопросы:

1. Почему появилось 0 (хотя ожидалось NaN)?
2. Как переписать код так, чтобы:
- Если медиана существует → заполнить ею NaN
- Если медиана не существует (все значения NaN) → оставить NaN

---

🎯 Что проверяет задача:

Понимание, как median() работает на пустой серии
Понимание, что fillna(np.nan) может привести к замещению на 0 при приведении типов
Умение работать с группами, где нет данных

---

💡 Подсказка:

Если `x.median()` вернёт `nan`, то `x.fillna(nan)` оставит NaN внутри группы, **но transform может "автоматически" заменить NaN на 0 при сборке результата** (особенность Pandas).

Нужно явно управлять значением медианы, чтобы избежать непредвиденного замещения.

---

Ожидаемое правильное решение:

```python
def fill_with_median_or_nan(x):
med = x.median()
return x.fillna(med if pd.notna(med) else np.nan)

df['salary_filled'] = df.groupby('department')['salary'].transform(fill_with_median_or_nan)
```

Теперь в отделах, где медиана не существует, **NaN останется NaN**, а не превратится в 0.


🔥 Дополнительный подвох (для усложнения):

Что будет, если отдел состоит только из одного сотрудника с NaN?
→ Нужно ли обработать случай, где в отделе всего 1 запись и она NaN?


📝 Вывод:

Эта задача проверяет:

Понимание нюансов заполнения пропусков в Pandas
Внимательность к corner-case ситуациям
Умение работать с группами с частично или полностью отсутствующими данными

🔥 Отличная тренировка внимательности и глубины понимания Pandas!

BY Machine learning Interview


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/machinelearning_interview/1785

View MORE
Open in Telegram


Machine learning Interview Telegram | DID YOU KNOW?

Date: |

Start with a fresh view of investing strategy. The combination of risks and fads this quarter looks to be topping. That means the future is ready to move in.Likely, there will not be a wholesale shift. Company actions will aim to benefit from economic growth, inflationary pressures and a return of market-determined interest rates. In turn, all of that should drive the stock market and investment returns higher.

Telegram announces Search Filters

With the help of the Search Filters option, users can now filter search results by type. They can do that by using the new tabs: Media, Links, Files and others. Searches can be done based on the particular time period like by typing in the date or even “Yesterday”. If users type in the name of a person, group, channel or bot, an extra filter will be applied to the searches.

Machine learning Interview from no


Telegram Machine learning Interview
FROM USA